// 解决异步：

// interface AutoProps {
//   success: (str: string) => void
// }
// 第一种解决方案：
// function auto({ success }: AutoProps) {
//   setTimeout(() => {
//     success('1')
//   }, 0)
// }

// auto({
//   success: (res) => {
//     console.log('res:', res)
//   }
// })


// function auto(): Promise<unknown> {
//   return new Promise((resolve, reject) => {
//     setTimeout(() => {
//       resolve('1')
//     }, 0)
//   })
// }

// async function AsyncFn() {
//   const data = await auto()
//   console.log('dat:', data)
// }
// AsyncFn()

// function *Generator():any {
//   let data = yield auto()
//   let data1 = yield console.log(1)
//   console.log('data:', data1, data)
//   // return data;
// }

// let it = Generator()
// console.log(it.next())

// auto().then(res => {
//   console.log('1:', res)
// })


// thun / saga / async;



// 异步依赖：

function getUrl(url:string, fn: (data:any)=>void) {
  fetch(url).then(res => res.json()).then(data => {
    fn(data)
  })
}

// 回调地狱
// getUrl('./data/data1.json', (data) => {
//   getUrl(`./data/${data.name}`, (data) => {
//     getUrl(`./data/${data.name}`, (res) => {
//       console.log('data:', res)
//       getUrl(`./data/${data.name}`, (res) => {
//         console.log('data:', res)
//         getUrl(`./data/${data.name}`, (res) => {
//           console.log('data:', res)
//           getUrl(`./data/${data.name}`, (res) => {
//             console.log('data:', res)
//           })
//         })
//       })
//     })
//   })
// })


function getPromiseUrl(url: string) {
  return new Promise((resolve, reject) => {
    fetch(url).then(res => res.json())
    .then(data => {
      resolve(data)
    })
  })
}
// // promise将异步回调的return能力又恢复了；
// getPromiseUrl('./data/data1.json')
// .then((res:any) => {
//   return getPromiseUrl(`./data/${res.name}`)
// })
// .then((res:any) => {
//   return getPromiseUrl(`./data/${res.name}`)
// })
// .then(res => {
//   console.log('res:', res)
// })

// async function fetchUrl(params:string) {
//   await getPromiseUrl('./data/data1.json')
//   await getPromiseUrl('./data/data1.json')
//   await getPromiseUrl('./data/data1.json')
// }

// fetchUrl('')

;(() => {
  let num = 10;
  console.log('我是更改的数据:', 1)
  setTimeout(() => {
    num+10;
  }, 1000)
  return {
    on: function() {
      console.log('num:', num)
    }
  }
})()

// ;(() => {

// })()
